/**
 * Description:
 * Class Name:LambdaAndInner
 * Date:2022/2/12 13:29
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第6章_面向对象_下._6_8_Java11增强的lambda表达式._6_8_5_Lambda表达式与匿名内部类的联系和区别;

@FunctionalInterface
interface Displayable{
    // 定义一个抽象方法和默认方法
    void display();
    default String add(int a, int b){
        return "" + a + "+" + b + "的结果是：" + (a + b);
    }
}

public class LambdaAndInner {
    private int age = 12;
    private static String name = "an apple";
    public void test(){
        var book = "Trinity";
        Displayable dis = () -> {
            // 访问“effectively final”的局部变量
            System.out.println("book局部变量为：" + book);
            // 访问外部类的实例变量和类变量
            System.out.println("外部类的age实例变量为：" + age);
            System.out.println("外部类的name类变量为：" + name);
        };
        dis.display();
        // 调用dis对象从接口中继承的add()方法
        System.out.println(dis.add(3, 5));                  // ①
    }

    public static void main(String[] args) {
        var lambda = new LambdaAndInner();
        lambda.test();
    }
}
